package cn.wolfcode.crm.service;

import cn.wolfcode.crm.domain.Officialstu;
import cn.wolfcode.crm.query.QueryForObject;
import cn.wolfcode.crm.query.ReportQueryForObject;
import cn.wolfcode.crm.util.PageResult;

import java.util.List;
import java.util.Map;

public interface IOfficialstuService {

    void insert(Officialstu record);

    Officialstu selectByPrimaryKey(Long id);

    List<Officialstu> selectAll();

    void updateByPrimaryKey(Officialstu record);

    /**
     *  分页查询
     * @param qo
     * @return
     */
    PageResult query(QueryForObject qo);

    /**查询未付清的学员
     *
     * @return
     */
    List<Officialstu> selectNoPayAll();


    /**
     * 根据学员查学员基本信息
     * @param id
     * @return
     */
    Officialstu queryById(Long id);

    /**
     * 改变学员状态，1在读 2转班中 3休学 4劝退
     * @param stuId
     * @param state
     */
    void changeState(Long stuId, Integer state);

    /**
     * 改变学员班级和状态----(state可以不要传过来，应为此状态值为固定改变)
     * @param stuId
     * @param newGradeId
     * @param state
     */
    void changeClasses(Long stuId, Long newGradeId, Integer state);

    /**
     * 根据大客户(学校)id查该学校有多少人成为正式学员
     * @param id 大客户(学校)id
     * @return 正式学员数量
     */
    int selectAllStudentByBigClient(Long id);

    /**
     * 根据学员流失表退款状态查到对应学员
     * @return
     */
    List<Officialstu> selectAllByRefundState();

    /**
     * 分组查询
     * @return
     */
    List<Map<String,Object>> selectGroupBy(ReportQueryForObject groupName);
}
